/**
 * Clase PantallaRegistro: define la pantalla que vera el usuario, la primera vez que arranque la
 * aplicacion, para que pueda almacenar sus parametros identificativos, y de esta manera evitar
 * el tedioso proceso de login en un dispostivo movil (mejoras de USABILIDAD)
 */

package infbmobile.pantallas;

// Importaciones externas
import com.sun.lwuit.*;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.events.ActionListener;

// Importaciones internas
import infbmobile.main.*;
import infbmobile.almacenamiento.*;
import infbmobile.comunicaciones.*;
import infbmobile.util.UIHerramientas;


public class PantallaRegistro extends Form implements ActionListener {
    // Referencia al midlet principal
    public InfBMobile midlet;

    // Atributos de clase
    private TextField dni;
    private TextField tarjetaSanitaria;
    private TextField password;
    private Command comandoGuardar;
    private Command comandoConectar;
    private Command comandoSalir;

    
    /*
     * Constructor principal de la clase
     */
    public PantallaRegistro(InfBMobile midlet) {
        super("Registro de Paciente - HospiGest Pacientes");
        this.midlet=midlet;
        // Definimos el layout del formulario
        setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        // Creamos y agregamos los componentes especificos de la pantalla
        dni=new TextField(CENTER);
        dni.setConstraint(TextField.ANY);
        addComponent(UIHerramientas.crearPareja("dni: ",dni));
        tarjetaSanitaria=new TextField(CENTER);
        addComponent(UIHerramientas.crearPareja("tarjeta sanitaria: ",tarjetaSanitaria));
        password=new TextField(CENTER);
        password.setConstraint(TextField.PASSWORD);
        addComponent(UIHerramientas.crearPareja("password: ",password));
        // Configuramos los comandos
        comandoSalir=new Command("Salir");
        addCommand(comandoSalir);
        comandoGuardar=new Command("Guardar");
        addCommand(comandoGuardar);
        comandoConectar=new Command("Conectar");
        setCommandListener(this);
    }

    public void actionPerformed(ActionEvent evento) {
        Object fuente=evento.getSource();

        // Recogemos de donde vino el evento
        if(fuente==comandoGuardar){
            // Validamos basicamente la informacion introducida y guardamos la configuracion en el RMS
            String dniIntroducido=dni.getText();
            String tarjetaSanitariaIntroducida=tarjetaSanitaria.getText();
            String passwordIntroducido=password.getText();
            if(dniIntroducido.trim().length()>0 && tarjetaSanitariaIntroducida.trim().length()>0 && passwordIntroducido.trim().length()>0){
                // Si la validacion basica es correcta almacenamos los parametros en el dispositivo
                Identificacion.setDni(dniIntroducido);
                Identificacion.setTarjetaSanitaria(tarjetaSanitariaIntroducida);
                Identificacion.setPassword(passwordIntroducido);
                Identificacion.establecer();
                // Mostramos mensaje de ok al usuario
                UIHerramientas.mostrarAviso("Operacion OK","Sus parametros de identificacion han sido correctamente almacenados. Por favor, pulse Conectar para acceder a la aplicacion");
                // Instanciamos el comando para conectarnos a la aplicacion
                removeCommand(comandoGuardar);
                addCommand(comandoConectar);
            }else{
                // Mostramos mensaje de error
                UIHerramientas.mostrarAviso("Error","Por favor, introduzca todos los parametros de identificacion correctamente.");
            }
        }else if(fuente==comandoConectar){
            // Configuramos una comunicacion http mediante el uso de la libreria desarrollada
            ComunicacionHttp.setHost(midlet.servidorWeb);
            ComunicacionHttp.setPuerto(midlet.puerto);
            ComunicacionHttp http = new ComunicacionHttp(ComunicacionHttp.LOGIN, "Login", null);
            String[] nombreParametros = new String[]{"accion", "perfil", "identificacion", "password"};
            String[] valoresParametros = new String[]{"login", "paciente", Identificacion.getTarjetaSanitaria(), Identificacion.getPassword()};
            http.setNombreParametros(nombreParametros);
            http.setValoresParametros(valoresParametros);
            http.setCheckSesion(false);
            http.setModoHebra(false);
            http.conectar();
            // Interpretamos el codigo de la respuesta
            String codigo = http.getCodigoRespuesta();
            if (!codigo.equalsIgnoreCase(CodigosMensajes.OPERACION_ERRONEA)) {
                // El servidor comenzo la sesion y envio el identificador
                // al dispositivo movil para que este lo almacene local y temporalmente
                Identificacion.setIdSesion(codigo);
                Identificacion.establecerIdSesion();
                System.out.println("Guardado ID sesion correctamente:" + codigo);
                // Mostramos el menu principal
                midlet.mostrarPantallaMenuPrincipal();
            } else {
                // Mostrar la pantalla de actualizacion de registro
                midlet.mostrarPantallaActualizacionIdentificacion();
            }
        }else if(fuente==comandoSalir){
            midlet.salir();
        }

    }

}
